/**
 * 
 */
package santeclair.referentiel.optique.referentiel.dao.impl;

import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

import org.springframework.stereotype.Repository;

import santeclair.lunar.framework.dao.jpa.exception.JpaExceptionHelper;
import santeclair.lunar.framework.dao.jpa.impl.FwkCodeJpaDAO;
import santeclair.referentiel.optique.config.Constant;
import santeclair.referentiel.optique.model.DistributeurOptique;
import santeclair.referentiel.optique.referentiel.dao.DistributeurOptiqueDAO;

/**
 * @author cquintin
 * 
 */
@Repository
public class DistributeurOptiqueDAOImpl extends FwkCodeJpaDAO<DistributeurOptique, String> implements DistributeurOptiqueDAO {

    private static final String DISTRIBUTEUR_CODEOPTO = "codeOpto10DistributeurOptique";

    private static final String FIND_DISTRIBUTEUR_BY_CODEOPTO = " SELECT distributeur FROM " + DistributeurOptique.class.getSimpleName() + " distributeur WHERE :"
                    + DISTRIBUTEUR_CODEOPTO + " = distributeur.codeOpto10DistributeurOptique ";

    @PersistenceContext(unitName = Constant.PERSISTENCE_UNIT_NAME)
    private EntityManager em;

    @Override
    public Class<DistributeurOptique> getEntityClass() {
        return DistributeurOptique.class;
    }

    @Override
    public EntityManager getEntityManager() {
        return em;
    }

    @Override
    public DistributeurOptique getDistributeurByCodeOpto(String codeOpto10) {
        TypedQuery<DistributeurOptique> query = em.createQuery(FIND_DISTRIBUTEUR_BY_CODEOPTO, DistributeurOptique.class);
        query.setParameter(DISTRIBUTEUR_CODEOPTO, codeOpto10);

        try {
            return query.getSingleResult();
        } catch (NoResultException nre) {
            throw JpaExceptionHelper.addQueryInformation(FIND_DISTRIBUTEUR_BY_CODEOPTO, query, nre, NoResultException.class);
        }
    }

}
